<?php
	error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

	// alapvető init műveletek
	define('APP_ROOT_DIR', str_replace('\\', '/', realpath("..")) . "/");
	
	// nézzük van-e folyamatban update!
	$updateAnswerPhpFile = null;
	include('waitForUpdate.php');
	
	// felépítjük a minimális include_path értékét
	// ha van ilyen, akkor egyből hozzá is adhatjuk az extra könyvtárakat, amik a base
	// cuccon felül kellenek
	require_once('../lib/classes/classIncludePathManager.php');
	IncludePathManager::addBasePath('.');
	IncludePathManager::addPrefix(APP_ROOT_DIR);
	IncludePathManager::updateIncludePath();
	
	// most már behívhatjuk a base fájlt
	require_once("classBaseAdminBase.php");
	
	// kiegészítjük az include path cuccot az alap dolgokkal
	AdminBase::addBaseIncludePaths();
	IncludePathManager::updateIncludePath();
	
	// class-ok betöltéséhez felépítjük a nyilvántartást
	require_once('classes/classLoader.php');
	// base rendszer osztályait hozzáadatjuk
	AdminBase::addBaseClasses();
	
	// mehetnek a base init műveletek!
	// ez betölti a config-ot, konstansokat és a DB rendszert
	AdminBase::initBaseConfigAndDB();

	// véglegesítjük a konstans definíciókat
	ConstHandler::finalizeAsConstants();
	
	// még a session indítás előtt az engedélyezett modulok class-ait hozzá kell adni a classLoader-hez
	ModuleHandler::addModulesClasses();
	
	
	// betöltjük a custom dbconfig fájlt és a többi custom dolgot
	require_once 'dbconfig.php';
	// init the DB
	// nem lenne muszáj ezt meghívni igazából, mégis megtesszük - már csak azért, hogy lássuk már itt hogy
	// sikerül-e a megnyitás...
	$dbOK = DBHandler::dbInit();
	if(!$dbOK)
	{
		$msg = "DBHandler::dbInit() failed! Probably db is not available please check!";
		MailHelper::sendAdminMail("db init error", $msg, null, true);
		Log::fatal($msg);
		exit('Database init failed, database is not available! Developers were notified about this error please try again later!');
	}
	
	// indul a session
	AdminBase::startSession();
	Log::info("--- incoming request: (".$_SERVER['REQUEST_METHOD'].") ".UrlUtil::getRequestUrl());
	
	
	// site-szerkezet init
	AdminBase::initSiteStructure();
	// esetleges site-váltás
	AdminBase::manageSiteChanges();
	
	// site nyelvek init
	AdminBase::addEditLanguagesFromDB();
	AdminBase::setDefaultEditlang(SiteHandler::getCurrentDefaultLangcode());

	// lőjük be az admin felület default nyelvét és nyelveit
	TextHandler::addLanguagesFromArray(ConstHandler::get('ADMIN_LOCALES'));
	TextHandler::setDefaultLangcode(ADMIN_MAIN_LANGUAGE);

	// kezeljük le a nyelveket vagy azok váltását!
	AdminBase::manageLanguageChanges();

	// inicializáljuk a linkeket és a szövegeket, egyben ez beemeli majd a custom
	// linkeket és szövegeket is
	AdminBase::initBaseLinksAndTexts();
	
	// modulok kezelése
	ModuleHandler::loadModules();
	
	// felépítjük az admin rendszer menüjét - ez mindig custom módon történik
	require_once("adminMenus.php");
	
	// behívjuk a maradék alrendszert, mint a template motor és társai
	AdminBase::initRestOfBaseSubsystems();

	// határozzuk meg az aktuális oldalt!
	AdminBase::determinePage();

	// kezeljük le a login/logout kérdéskört
	AdminBase::manageLoginLogout();

	// válasz generálás
	$htmlResponse = AdminBase::generateResponse();
	
	// és meg is vagyunk!
	echo($htmlResponse);	
		
?>
